package jmine.tec.hydra.services.excluir;

import jmine.tec.di.annotation.Injected;
import jmine.tec.hydra.domain.HydraSystem;
import jmine.tec.services.annotations.Execution;
import jmine.tec.services.annotations.Input;
import jmine.tec.services.annotations.Output;
import jmine.tec.services.annotations.ServiceImplementor;
import jmine.tec.services.api.ActionsEnum;
import bancosys.tec.persist.dao.BaseDAO;
import bancosys.tec.persist.dao.BeanNotFoundException;

/**
 * Serviço para excluir de um sistema de integração.
 * 
 * @author piercio
 */
@ServiceImplementor(action = ActionsEnum.EXCLUIR)
public class HydraSystemService {

    public static final String IDENTIFICADOR = "Identificador";

    public static final String MNEMONICO = "Mnemônico";

    // Injected
    private BaseDAO<HydraSystem> dao;

    // Obrigatório
    private String mnemonico;

    /**
     * Executa o serviço e remove um {@link HydraSystem}
     * 
     * @return o sistema de integração.
     * @throws BeanNotFoundException caso não encontre o sistema para o mnemonico passado.
     */
    @Execution
    @Output(propertyName = IDENTIFICADOR)
    public HydraSystem executeService() throws BeanNotFoundException {
        HydraSystem system = this.dao.findByNaturalKey(this.mnemonico);
        system.getPersister().remove();
        return system;
    }

    /**
     * @param dao o dao
     */
    @Injected
    public void setDao(BaseDAO<HydraSystem> dao) {
        this.dao = dao;
    }

    /**
     * @param mnemonico o mnemonico do sistema.
     */
    @Input(fieldName = MNEMONICO)
    public void setMnemonico(String mnemonico) {
        this.mnemonico = mnemonico;
    }
}
